Computer graphics involves the rendering of images for display on a visual terminal of a computer. Rendering involves the translation of the three-dimensional (3D) geometry of graphical objects into picture elements (pixels) that are stored in a frame buffer. The contents of the frame buffer can then be displayed on the visual terminal or display device.
In a computer gaming, 3D animation is used to display a sequence of images interactively to the user of the computer game, which gives the illusion of motion in three-dimensional space. This interactivity allows a user to change a scene or the point of view in the scene. These on-demand changes initiated by the user require a rendering system that can create new images in real-time.
Computer games are one example of a 3D computer graphics system. Others include computer-aided design (CAD) and virtual reality (“VR”). A 3D graphics accelerator is typically used in these types of systems. The graphics hardware is used to receive off-loaded processing functions from a host processor to speed up system performance.
An application program executing on a host processor generates three-dimensional geometry data including information corresponding to points on the surface of a three-dimensional graphical object. These points are usable as vertices of polygons which, when connected, may be rendered to form a representation of the graphical object. The application program causes the host processor to transfer this 3-D geometry data to a graphics accelerator, along with corresponding control and connectivity information. The graphics accelerator receives this stream of compressed 3-D geometry data and, for reasons of speed and diversity, renders a series a collection of flat encoded polygons, for example triangles, in a frame buffer for subsequent display on an attached display device. A polygonal system such as this has the advantage of being able to translate and project such objects quickly and efficiently. The process of connecting three-dimensional vertices into component polygons, the sum of which represents a graphical object, is referred to as “tiling”.
Each graphical object to be rendered has a coordinate system that is local to the graphical object within the 3D computer graphics system. This coordinate system needs to be transformed from the coordinate system of the graphical object to the pixel display coordinates in the frame buffer. Once the geometry of the object has been transformed into screen coordinates, it is rasterized or broken into a set of pixel color values that are stored into the frame buffer.
Each corner or vertex of each polygon has associated therewith certain values for pixel parameters based on the graphical object itself and the environmental properties of the graphical object. Interpolation is used for each pixel in the polygon area to generate the pixel parameters. One such pixel parameter is texture. Texture on the polygon is suggested by means of a texture map to accomplish finer detail in the polygon.
In conventional commodity graphics hardware, the surface of an object is typically digitally represented by a texture in terms of four (4) color channels, namely red, green, blue, and alpha. At each vertex of each polygon, two-dimensional (2D) coordinates are specified for the orientation in the tangent plane of the light. The 2D qualities include color and brightness and are encoded by the first three channels. A texture is also encoded with three-dimensional properties, such as how transparent and reflective the object is by use of the fourth channel—the alpha channel. Once at texture is parameterized by a point on a surface, another texture can be parameterized by where the light is relative to the local surface point. Then, once a texture has been defined, it can be wrapped around any 3-dimensional object in a texture mapping process.
A texture map is a picture stored in a computer memory as a bit map that is applied to the polygons that make up the graphical object to make the graphical object look more realistic. The texture map is comprised of individual two dimensional space rectangular ‘texels’ coordinates that depict a certain texture. When the texels are mapped onto a polygon, it will appear to be textured.
Texture mapping processes can be used to render an appearance of a smooth surface. A more realistic and topographical rendering, however, can be accomplished using a texture map that is known as a bump map. Bump mapping uses a bump map that is associated with a surface. The bump map, which is normally pre-calculated into a look up table stored in memory, is a collection of different surface normal vectors on different surface locations of the surface to create an impression of a rough surface. Stated otherwise, bump mapping simulates the effect of light reflecting from small perturbations across a surface. Bump mapping, often considered as the application of a shading function to an object, is done on a pixel-by-pixel basis.
Bump mapping techniques, which convey surface texture by perturbing the normal vectors of a surface, are available on conventional commodity graphics hardware. The advantage of bump mapping is that it provides a simple way to modulate the shading on a surface. Bump maps represent a special kind of texture map. Instead of a color, each texel of a bump map contains a height field gradient. Bump maps are applied to a surface of an object using standard texture-mapping tools. Very complex surfaces (wrinkles, folds, bumps) can be simulated without increasing the complexity of the surface itself. A space in which the bump map is defined is called a map space.
In bump mapping, texel coordinates, designated as “u” and “v”, are used in a single component texture map, ƒ(u, v). The texture map is interpreted as a height field that perturbs at each point on the surface along its normal vectorN=(Pu×Pv)/|(Pu×Pv)|,  (1)where Pu and Pv are partials of the parameterization of texture space axes u and v. Rather than actually changing the surface geometry, however, only the normal vector is modified.
Shadows play an important providing perceptual cues for perceiving surface shape and surface texture of an object. Bump mapping, however, does not define any explicit geometry such that there are no actual bumps to cast shadows. Stated otherwise, a bump defined by a conventional bump mapping function can cast neither a bumpy shadow nor a shadow on another object. Thus, interactive shadowing techniques that rely on an explicit representation of the geometry cannot be used to simulate shadows cast by the virtual bumps implied in bump mapping.
It would be an advance in the art to provide a technique to render with commodity graphics hardware, in real time at interactive rates, a graphical image of an object having a bump mapped surface, where the bumps on the bump mapped surface cast shadows, thus more accurately accounting for the geometry of the underlying bump mapped surface. It would also be an advance in the art to represent limited self-shadowing for pure geometry while maintaining interactivity with a user of a computer.